import Vue from 'vue'
import App from './App.vue'
//如果文件夹中文件是index.js,文件名可以省略
import router from './router'
import store from './store'
import axios from 'axios'
import './assets/style/common.sass'
import ConfirmBox from './components/ConfirmBox.vue'
import SwitchBox from './components/SwitchBox.vue'
import ModalBox from './components/ModalBox.vue'
import Player from 'seec-player'
import '@vant/touch-emulator'
import StarBox from '@/components/StarBox.vue'
Vue.use(Player);
Vue.config.productionTip = false
// 全局组件在main.js中定义,先导入组件,然后使用Vue.component,在任何地方都可以使用
Vue.component('confirm-box',ConfirmBox)
Vue.component('switch-box',SwitchBox)
Vue.component('modal-box',ModalBox)
//定义全局组件(任意位置都可以使用的组件),通过Vue构造函数上的静态方法
Vue.component('star-box',StarBox)
//在window全局的变量上,保存创建好一个Vue实例
window.eventBus=new Vue()
/*
  Vue实例上有这些事件相关的方法:
    注册事件:eventBus.$on('自定义事件名称',event=>{console.log(event)})
    解绑/删除/注销事件:eventBus.$off('自定义事件名称',event=>{console.log(event)})
    触发/派发事件:eventBus.$emit('自定义事件名称',传递的数据)
*/

axios.defaults.timeout=30000;//请求超时时间设置为30秒
axios.defaults.baseURL='/api'//请求公共路径前缀
//配置拦截器interceptors
//服务器响应拦截response
axios.interceptors.response.use(
  //请求成功的拦截,参数是返回的数据
  rsp=>{
    if(rsp.data.code>0){
      alert(rsp.data.msg)
    }
    //成功方法中必须将数据返回
    return rsp;
  },
  err=>{
    return Promise.reject(err)
  }
)
//将axios定义在Vue构造函数的原型上,这样所有的Vue组件实例都可以通过this.request访问axios
Vue.prototype.request = axios


window.eventBus = new Vue()
//window.eventHub
/*
  Vue的实例上有这些事件方法:
  1.注册事件
    eventBus.$on('事件名称',回调函数 event=>{
      console.log(event)
    })
  2.触发事件
    eventBus.$emit('事件名称',携带的数据 data)
  3.解绑/注销事件
    eventBus.$off('事件名称',回调函数 event=>{
      console.log(event)
    })
*/
// 将router路由实例挂在Vue根实例$root上,这样所有的子组件都可以通过this.$router来访问路由实例
new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')
